package com.ruoyi.util.file;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.util.mysqljdbc.Mysql8jdbc;

import java.io.*;
import java.util.Map;

/**
 * @Description:读取JSON 文件 
 * @ClassName: ReradJson
 * @author syc
 * @date: 2022年8月25日 上午8:50:59
 */
public class ReradJson {

//	public static void main(String[] args) {
//		Mysql8jdbc mysql = new Mysql8jdbc();
//		
//		ReradJson reradJson = new ReradJson();
//		 JSONObject json = ReradJson.readJson_1("C:\\Users\\Acer\\Desktop\\郑州27区\\123456.json");
//		 if (json != null && json.getJSONArray("data") != null && json.getJSONArray("data").size() > 0) {
//			 JSONArray jsonArray = json.getJSONArray("data");
//			 JSONArray dataArray = new JSONArray();
//			 for (int i = 0; i < jsonArray.size(); i++) {
//				 reradJson.threeToList(dataArray, jsonArray.getJSONObject(i));
//			 } 
//			 System.out.println(dataArray.size()); 
//			 for (int i = 0; i < dataArray.size(); i++) {
//				 
//			 }
//		 } 
//
////	Map<String, Object> map = ReradJson.readValue_2("D:/test123456/test.json", Map.class);
////		System.out.println(map);
////		JSONObject json = new JSONObject();
////		json.put("123","张三");
////		json.put("124","李四");
////		json.put("125","王五");
////		json.put("126","赵六");
////		json.put("188",new int[]{1,2,3,4});
////
////		ReradJson.writeJson("D:/test123456/test.json", json, false);
////
//	}

	/**
	 *	 递归将JSON树转为JSONArray
	 */
   public void threeToList(JSONArray jsonArray, JSONObject jsondata) {
	  // JSONObject jsonEntity = new JSONObject();      
	   if (jsondata.containsKey("children") && jsondata.getJSONArray("children").size() > 0) {
		   for (int i = 0; i < jsondata.getJSONArray("children").size(); i++) {
			   threeToList(jsonArray,  jsondata.getJSONArray("children").getJSONObject(i));
		   }
		   jsondata.remove("children");
		   jsonArray.add(jsondata);   
	   } else {
		   jsonArray.add(jsondata);
	   }  
   }
	// 读取JSON是一个不常用,但是在特殊需求下可能会用到.
	// 所以让我们写几个读取JSON的方法吧.
	public static JSONObject readJson_1(String filePath) {
		JSONObject jsonObject = null;
		if (filePath != null && !filePath.equals("")) {
			File file = new File(filePath);
			if (file.isFile()) {
				try {
					Reader reader = new InputStreamReader(new FileInputStream(file), "Utf-8");
					int ch = 0;
					StringBuffer sb = new StringBuffer();
					while ((ch = reader.read()) != -1) {
						sb.append((char) ch);
					}
					reader.close();
					String jsonStr = sb.toString();
					jsonObject = JSONObject.parseObject(jsonStr);
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return jsonObject;
	}

	/**
	 * @Author syc
	 * @Date Created in 2022-08-25 10:24:16
	 * @Description 这个xml相关方法......哎
	 * 测试过的只有 Map,JSONObject
	 */
	public static <T> T readValue_2(String filePath, Class<T> valueType){
		File file = new File(filePath);
		ObjectMapper objectMapper = new ObjectMapper();
		try {
			return (T) objectMapper.readValue(file, valueType);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 往json文件中写入数据
	 * @param filePath json文件路径
	 * @param obj Map或JSONObject类型数据
	 * @param flag 写入状态，true表示在文件中追加数据，false表示覆盖文件数据
	 * @return 写入文件状态  成功或失败
	 */
	public static String writeJson(String filePath, Object obj, boolean flag) {
		// Map数据转化为Json，再转换为String
		String data = "";
		if(obj instanceof Map) {
			data = new JSONObject((Map)obj).toString();
		} else if (obj instanceof JSONObject) {
			data = obj.toString();
		} else {
			return "error";
		}
		File jsonFile = new File(filePath);
		try {
			// 文件不存在就创建文件
			if (!jsonFile.exists()) {
				jsonFile.createNewFile();
			}
			FileWriter fileWriter = new FileWriter(jsonFile.getAbsoluteFile(), flag);
			BufferedWriter bw = new BufferedWriter(fileWriter);
			bw.write(data);
			bw.close();
			return "success";
		} catch (IOException e) {
			return "error";
		}
	}
		
}
